switch...case 進行條件對應?<option value="..."> 更高效?在 Day 09 中,我們順利算出了使用者的 BMR (基礎代謝率)。然而,人不可能整天躺著不動,我們每天上班、走路、運動都會消耗額外的熱量。
TDEE (每日總消耗熱量) 的計算公式為:
TDEE = 基礎代謝率(BMR)× 活動量係數
根據國際公認的哈里斯-本尼迪克特 (Harris-Benedict) 描述,活動量通常分為 5 個等級(從久坐的 1.2 到重度運動的 1.9)。今天我們將探討如何在 JavaScript 中處理這些係數對應,並將最終結果動態更新到馬卡龍 UI 畫面上!
switch...case 進行條件對應?在許多程式開發場景中,如果選單傳過來的是字串(例如 "option1", "option2"),我們通常會使用 switch...case 敘述 進行多重條件判斷:
// 假設 HTML 下拉選單傳來的數值是字串代碼
const activityLevel = "light"; // 例如:輕度運動
let activityFactor = 1.2; // 預設為久坐係數
// 使用 switch...case 判斷活動等級
switch (activityLevel) {
case "sedentary":
activityFactor = 1.2; // 久坐 / 幾乎不運動
break;
case "light":
activityFactor = 1.375; // 輕度運動(每周 1-3 天)
break;
case "moderate":
activityFactor = 1.55; // 中度運動(每周 3-5 天)
break;
case "active":
activityFactor = 1.725; // 重度運動(每周 6-7 天)
break;
case "extreme":
activityFactor = 1.9; // 極重度運動(高強度勞動/運動員)
break;
default:
activityFactor = 1.2;
}
// 算出 TDEE
const tdee = bmr * activityFactor;
switch...case 非常適合處理擁有多個分支條件的情境,break 能防止程式碼繼續向下「貫穿 (fall-through)」,發揮精準判斷的作用。
const tdee = bmr * act?雖然 switch...case 非常直覺,但在我們的《馬卡龍醫藥健康工具箱》中,我們採用了更簡潔的方式。
我們直接將係數寫在 HTML 的 <select> 標籤中:
<!-- HTML 選單直接賦予 float 係數值 -->
<select id="activity">
<option value="1.2">久坐 / 幾乎不運動</option>
<option value="1.375">輕度活動 (每週運動 1-3 天)</option>
<option value="1.55">中度活動 (每週運動 3-5 天)</option>
<option value="1.725">高度活動 (每週運動 6-7 天)</option>
</select>
這樣一來,JavaScript 只需要下面那行程式碼讀取並轉成數字:
/tool1-calculator.js
就可以簡化成一行
const tdee = bmr * act;
完全不需要寫繁瑣的 switch...case
今天我們不僅學習了 switch...case 在條件對應上的應用,更體會到了如何透過 HTML 語意化設計簡化 JS 邏輯。